type token =
  | BOOL
  | BREAK
  | CLASS
  | CONTINUE
  | DO
  | DOWNTO
  | ELSE
  | EXTENDS
  | FLOAT
  | FOR
  | IF
  | INTEGER
  | NEW
  | REPEAT
  | STRING
  | THEN
  | TO
  | UNTIL
  | WHILE
  | RETURN
  | VOID
  | NULL
  | SELF
  | ADD
  | SUB
  | MUL
  | FDIVI
  | IDIVI
  | MOD
  | EQUAL
  | LESS
  | GREAT
  | LEQUAL
  | GEQUAL
  | NEQUAL
  | AND
  | NOT
  | OR
  | ASSIG
  | ONEQUAL
  | CONCAT
  | LSQUARE
  | RSQUARE
  | LPAREN
  | RPAREN
  | LBRACK
  | RBRACK
  | SEMICOLON
  | COLON
  | DCOLON
  | DOT
  | COMMA
  | INT_LITERAL of (int)
  | ID of (string)
  | STRING_LITERAL of (string)
  | FLOAT_LITERAL of (float)
  | BOOL_LITERAL of (bool)
  | EOF

val program :
  (Lexing.lexbuf  -> token) -> Lexing.lexbuf -> unit
